package ru.pb.game.network.engine.client.packets.receivable;

import ru.pb.game.data.xml.holders.ChannelHolder;
import ru.pb.game.network.clients.GameClient;
import ru.pb.game.network.engine.client.packets.FromClientToGameServerPacket;
import ru.pb.game.network.engine.client.packets.sendable.PROTOCOL_LOBBY_ENTER_ACK;
import ru.pb.game.objects.model.CHANNEL;
import ru.pb.game.objects.model.players.Player;
import ru.pb.game.objects.model.players.enums.SLOT_STATE;
import ru.pb.game.objects.model.room.Room;

/**
 * Запрос на вход в лобби.
 * 
 * @author Felixx
 */
public class PROTOCOL_LOBBY_ENTER_REQ extends FromClientToGameServerPacket
{
	@Override
	public void readImpl()
	{
		//readH(); //фрост
	}

	@Override
	public void runImpl()
	{
		GameClient client = getClient();
		Player p = getPlayer();
		CHANNEL ch = ChannelHolder.getChannel(client.getChannelId());
		if(p != null)
		{
			for(Room r : ch.getRooms())
				if(r.getAllPlayers().contains(p.getObjectId()))
					r.removePlayer(p);

			if( !ch.getAllPlayers().contains(p.getObjectId()))
			{
				ch.addPlayer(p);
				if(p.getRoom() != null)
					p.getRoom().changeSlotState(p.getSlot(), SLOT_STATE.SLOT_STATE_EMPTY);
			}
		}
		// Надо клиенту слать а не игроку. Ибо НПЕ будет если чар не создан.
		ch.removeEmptyRooms(); // Удаляем все пустые комнаты с канала.
		client.sendPacket(new PROTOCOL_LOBBY_ENTER_ACK());
	}
}